home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / obero / OberonAModules.lha / XFDmaster.mod < prev    next >
Text File  |  1999-02-26  |  5KB  |  187 lines

  1. (*
  2. (* Copyright © 1994 by Georg Hörmann
  3. ** All Rights Reserved
  4. **
  5. ** Amiga Oberon Interface Module:
  6. ** $VER: XFDmaster.mod 34.1 (14.05.95)
  7. ** converted from orginal includes by Bert Jahn
  8. ** Copyright © 1995 by Bert Jahn
  9. **
  10. ** Only the for "lib-using" needed types & constants are exported
  11. ** if you want to write a sublib (make this sense in Oberon ??) you have to
  12. ** change this file and export all you need
  13. **
  14. ** 02.03.95 initial
  15. ** 14.05.95 new type "SpecialPtr" (bj)
  16. ** Converted to Oberon-A 1.6 by Morten Bjergstrøm
  17. ** 15.9.97
  18. ** EMail: mbjergstroem@hotmail.com
  19. *)
  20. *)
  21.  
  22. <*STANDARD-*>
  23.  
  24. MODULE XFDmaster;
  25.  
  26. IMPORT
  27.   e := Exec, Kernel,Sets,SYS:=SYSTEM;
  28.  
  29. CONST
  30.   xfdmasterName  * = "xfdmaster.library";
  31.   includeVersion * = 34;
  32.   maxSpecialLen  * = 18;
  33.  
  34. TYPE
  35.   BufferInfoPtr    * = POINTER [2] TO BufferInfo;
  36.   SegmentInfoPtr   * = POINTER [2] TO SegmentInfo;
  37.   ForemanPtr         = POINTER [2] TO Foreman;
  38.   SlavePtr           = POINTER [2] TO Slave;
  39.   XFDmasterBasePtr   = POINTER [2] TO XFDmasterBase;
  40.   SpecialPtr       * = POINTER [2] TO ARRAY maxSpecialLen OF CHAR;
  41.  
  42. (* Buffer Info *)
  43. TYPE
  44.   BufferInfo * = RECORD [2]
  45.     sourceBuffer      * : e.APTR;
  46.     sourceBufLen      * : e.ULONG;
  47.     slave               : SlavePtr;
  48.     packerName        - : e.LSTRPTR;
  49.     packerFlags       - : SET;
  50.     error             - : e.UWORD;
  51.     targetBuffer      - : e.APTR;
  52.     targetBufMemType  * : Sets.SET32;
  53.     targetBufLen      - : e.ULONG;
  54.     targetBufSaveLen  - : e.ULONG;
  55.     decrAddress       - : e.ULONG;
  56.     jmpAddress        - : e.ULONG;
  57.     special           * : SpecialPtr;
  58.   END;
  59.  
  60. (* Segment Info *)
  61. TYPE
  62.   SegmentInfo * = RECORD [2]
  63.     segList     * : e.BPTR;
  64.     slave         : SlavePtr;
  65.     packerName  - : e.LSTRPTR;
  66.     packerFlags - : SET;
  67.     error       - : e.UWORD;
  68.     special     * : SpecialPtr;
  69.     relMode     * : e.UWORD;
  70.     reserved0     : e.UWORD;
  71.   END;
  72.  
  73. (* Error Codes *)
  74. CONST
  75.   errOk               * = 0;
  76.   errNoMemory         * = 1;
  77.   errNoSlave          * = 2;
  78.   errNotSupported     * = 3;
  79.   errUnknown          * = 4;
  80.   errNoSource         * = 5;
  81.   errWrongPassword    * = 6;
  82.   errBadHunk          * = 7;
  83.   errCorruptedData    * = 8;
  84.   errMissingResource  * = 9;
  85.   errUndefiniedHunk   * = 1000H;
  86.   errNoHunkHeader     * = 1001H;
  87.   errBadExtType       * = 1002H;
  88.   errBufferTruncated  * = 1003H;
  89.   errWrongHunkAmount  * = 1004H;
  90.   errUnsupportedHunk  * = 2000H;
  91.   errBadRelMode       * = 2001H;
  92.  
  93. (* Relocation Modes *)
  94. CONST
  95.   relDefault   * = 0;
  96.   relForceChip * = 1;
  97.   relForceFast * = 2;
  98.  
  99. (* Packer Flags *)
  100. CONST
  101.   reloc    * = 0;
  102.   addr     * = 1;
  103.   data     * = 2;
  104.   password * = 4;
  105.   relmode  * = 5;
  106.  
  107. (* Forman *)
  108. TYPE
  109.   Foreman = RECORD [2]
  110.     security   : e.ULONG;
  111.     id         : e.ULONG;
  112.     version    : e.UWORD;
  113.     reserved   : e.UWORD;
  114.     next       : ForemanPtr;
  115.     segList    : e.BPTR;
  116.     firstSlave : SlavePtr;
  117.   END;
  118. CONST
  119.   id       = 58464446H;
  120.   fVersion = 1;
  121.  
  122. (* Slave *)
  123. TYPE
  124.   Slave = RECORD [2]
  125.     next            : SlavePtr;
  126.     version         : e.UWORD;
  127.     masterVersion   : e.UWORD;
  128.     packerName      : e.LSTRPTR;
  129.     maxSpecialLen   : e.UWORD;
  130.     recogBuffer     : e.PROC;
  131.     decrunchBuffer  : e.PROC;
  132.     recogSegment    : e.PROC;
  133.     decrunchSegment : e.PROC;
  134.   END;
  135. CONST
  136.   sVersion = 1;
  137.  
  138. (* Library Base *)
  139. TYPE
  140.   XFDmasterBase = RECORD [2] (e.LibraryBase)
  141.     libNode      : e.Library;
  142.     segList      : e.BPTR;
  143.     dosBase      : e.LibraryPtr;
  144.     firstSlave   : SlavePtr;
  145.     firstForeman : ForemanPtr;
  146.   END;
  147.  
  148.  
  149. (* $StackChk- $RangeChk- $NilChk- $OvflChk- $ReturnChk- $CaseChk- *)
  150.  
  151. VAR
  152.   base - : XFDmasterBasePtr;
  153.  
  154. PROCEDURE AllocBufferInfo      *{base,-30}()                                 : BufferInfoPtr;
  155. PROCEDURE FreeBufferInfo       *{base,-36}(bufferinfo  {9}: BufferInfoPtr);
  156. PROCEDURE AllocSegmentInfo     *{base,-42}()                                 : SegmentInfoPtr;
  157. PROCEDURE FreeSegmentInfo      *{base,-48}(segmentinfo {9}: SegmentInfoPtr);
  158. PROCEDURE RecogBuffer          *{base,-54}(bufferinfo  {8}: BufferInfoPtr)   : BOOLEAN;
  159. PROCEDURE DecrunchBuffer       *{base,-60}(bufferinfo  {8}: BufferInfoPtr)   : BOOLEAN;
  160. PROCEDURE RecogSegment         *{base,-66}(segmentinfo {8}: SegmentInfoPtr)  : BOOLEAN;
  161. PROCEDURE DecrunchSegment      *{base,-72}(segmentinfo {8}: SegmentInfoPtr)  : BOOLEAN;
  162. PROCEDURE GetErrorText         *{base,-78}(error       {0}: e.UWORD)         : e.LSTRPTR;
  163. PROCEDURE TestHunkStructure    *{base,-84}(length      {0}: e.ULONG;
  164.                                            buffer      {8}: e.APTR)          : BOOLEAN;
  165. PROCEDURE TestHunkStructureNew *{base,-90}(length      {0}: e.ULONG;
  166.                                            buffer      {8}: e.APTR)          : e.UWORD;
  167. PROCEDURE Relocate             *{base,-96}(length      {0}: e.ULONG;
  168.                                            mode        {1}: e.UWORD;
  169.                                            buffer      {8}: e.APTR;
  170.                                            VAR result  {9}: e.BPTR)          : e.UWORD;
  171.  
  172. PROCEDURE* [0] CloseLib (VAR rc : LONGINT);
  173.  
  174. BEGIN (* CloseLib *)
  175.   IF base # NIL THEN e.CloseLibrary(base) END;
  176. END CloseLib;
  177.  
  178.  
  179. BEGIN
  180.  
  181.   base := SYS.VAL(XFDmasterBasePtr,e.OpenLibrary(xfdmasterName,includeVersion));
  182.  
  183.   IF base # NIL THEN Kernel.SetCleanup (CloseLib) END;
  184.  
  185. END XFDmaster.
  186.  
  187.